package com.demo.gulimall.product.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.demo.gulimall.common.valid.AddGroup;
import com.demo.gulimall.common.valid.UpdateGroup;
import lombok.*;
import java.io.Serializable;
import lombok.experimental.Accessors;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.apache.ibatis.annotations.Param;
import org.hibernate.validator.constraints.URL;

import javax.validation.constraints.*;

/**
 * 使用 JSR303 校验注解
 *
 * 品牌
 *
 * @author Chen Yuan
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@TableName("pms_brand")
public class Brand implements Serializable {
	/** 品牌id */
	@TableId(type = IdType.ID_WORKER) // 老版本
    //@TableId(type = IdType.ASSIGN_ID) // 新版本
	@JsonSerialize(using = ToStringSerializer.class)
	@TableField(value = "`brand_id`")
	@Null(message = "新增时ID必须为空", groups = AddGroup.class) // 必须为空, 分组校验, 标注什么情况需要校验
	@NotNull(message = "更新时ID不能为空", groups = UpdateGroup.class) // 不能为空, 分组校验
	private Long brandId;

	/** 品牌名 */
	@TableField(value = "`name`")
	//@NotNull
	//@NotEmpty // 不能是空字符串
	@NotBlank(message = "name不能为空") // 必须包含一个非空字符，不能是空格, message 是自定义的错误提示信息, 不写则使用默认的
	private String name;

	/** 品牌logo地址 */
	@TableField(value = "`logo`")
	@URL(message = "必须是一个合法的 URL")
	private String logo;

	/** 介绍 */
	@TableField(value = "`descript`")
	private String descript;

	/** 显示状态[0-不显示；1-显示] */
	@TableField(value = "`show_status`")
	private Byte showStatus;

	/** 检索首字母 */
	@TableField(value = "`first_letter`")
	@Pattern(regexp = "/^[a-zA-Z]$/") // 自定义的校验规则, 使用正则表达式
	private String firstLetter;

	/** 排序 */
	@TableField(value = "`sort`")
	@Min(value = 0) // 必须大于0
	private Integer sort;

}
